其他
Facebook面试题:在浏览器输入 URL 回车之后发生了什么?
前语:不要为了读文章而读文章,一定要带着问题来读文章,勤思考。
作者 :4Ark 来源 :http://1t.click/adfs
# 前言
大致流程:
URL 解析 DNS 查询 TCP 连接 处理请求 接受响应 渲染页面
# URL 解析
# DNS 查询
递归方式:一路查下去中间不返回,得到最终结果才返回信息(浏览器到本地DNS服务器的过程) 迭代方式,就是本地DNS服务器到根域名服务器查询的方式。 什么是 DNS 劫持 前端 dns-prefetch 优化
# TCP 连接
1、应用层:发送 HTTP 请求
请求报头(Request Header):请求方法、目标地址、遵循的协议等等 请求主体(其他参数)
浏览器只能发送 GET、POST 方法,而打开网页使用的是 GET 方法
2、传输层:TCP 传输报文
关于 TCP/IP 三次握手,网上已经有很多段子和图片生动地描述了。相关知识点:
SYN 泛洪攻击
4、链路层:以太网协议
标头:数据包的发送者、接受者、数据类型 数据:数据包具体内容
ARP 攻击
服务器接受请求
# 服务器处理请求
验证是否配置虚拟主机 验证虚拟主机是否接受此方法 验证该用户可以使用该方法(根据 IP 地址、身份信息等)
# 浏览器接受响应
# 渲染页面
1、HTML 解析
<html>
<head>
<title>Web page parsing</title>
</head>
<body>
<div>
<h1>Web page parsing</h1>
<p>This is an example Web page.</p>
</div>
</body>
</html>
2、CSS 解析
3、渲染树
标签名、class、id 是否内联样式
CSS 会阻塞 JS 执行 JS 会阻塞后面的 DOM 解析
CSS 资源排在 JavaScript 资源前面 JS 放在 HTML 最底部,也就是 </body>前
4、布局与绘制
5、合并渲染层
6、回流与重绘
display:none 会触发回流,而 visibility:hidden 只会触发重绘。
7、JavaScript 编译执行
1、词法分析
分词,例如将var a = 2,,分成var、a、=、2这样的词法单元。 解析,将词法单元转换成抽象语法树(AST)。 代码生成,将抽象语法树转换成机器指令。
2、预编译
全局环境 函数环境 eval
创建变量对象 参数、函数、变量 建立作用域链 确认当前执行环境是否能访问变量 确定 This 指向
3、执行
JS 引擎线程:也叫 JS 内核,负责解析执行 JS 脚本程序的主线程,例如 V8 引擎 事件触发线程:属于浏览器内核线程,主要用于控制事件,例如鼠标、键盘等,当事件被触发时,就会把事件的处理函数推进事件队列,等待 JS 引擎线程执行 定时器触发线程:主要控制setInterval和setTimeout,用来计时,计时完毕后,则把定时器的处理函数推进事件队列中,等待 JS 引擎线程。 HTTP 异步请求线程:通过XMLHttpRequest连接后,通过浏览器新开的一个线程,监控readyState状态变更时,如果设置了该状态的回调函数,则将该状态的处理函数推进事件队列中,等待JS引擎线程执行。
同步任务:按照顺序执行,只有前一个任务完成后,才能执行后一个任务 异步任务:不直接执行,只有满足触发条件时,相关的线程将该异步任务推进任务队列中,等待JS引擎主线程上的任务执行完毕时才开始执行,例如异步Ajax、DOM事件,setTimeout等。
console.log('1'); // 宏任务 同步
setTimeout(function() {
console.log('2'); // 宏任务 异步
})
new Promise(function(resolve) {
console.log('3'); // 宏任务 同步
resolve();
}).then(function() {
console.log('4') // 微任务
})
console.log('5') // 宏任务 同步
1,3,5,4,2
# 参考文档
[2]详见这篇文章: http://t.cn/AiR8pnEC
[3]MIME: http://t.cn/AiR8prtm
[4]语法规范: http://t.cn/AiR80GdO
[5]这篇文章: http://t.cn/AiR80c1k
[6]what-happens-when-zh_CN: http://t.cn/AiR80xb5
[7]Tags to DOM:http://t.cn/AiR80djX
[8]彻底理解浏览器的缓存机制: http://t.cn/AiR8Ovob
[9]浏览器的工作原理:新式网络浏览器幕后揭秘: http://t.cn/AiR8Oz06
[10]深入浅出浏览器渲染原理: http://t.cn/AiR8O4fO
[11]js引擎的执行过程(一):http://t.cn/AiR8Ot3s
面试官是怎么来考察你对ES搜索引擎的理解?
紧急:fastjson最新漏洞,可导致服务瘫痪!!!